/* Copyright (c) 2004-2024 peigen.info. All rights reserved. */

package info.peigen.hotpot.component.data.repository.beetlsql.handler;

import cn.hutool.core.util.ObjectUtil;
import info.peigen.hotpot.common.core.lang.money.Money;
import org.beetl.sql.annotation.builder.AttributeConvert;
import org.beetl.sql.clazz.kit.BeanKit;
import org.beetl.sql.core.ExecuteContext;

import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * <b>(MoneyBeetlSqlHandlerConvert)</b>
 *
 * @author Peigen
 * @version 1.0.0
 * @since 2022/5/28
 */
public class MoneyBeetlSqlHandlerConvert implements AttributeConvert {
    /**
     * 在存储到数据库前的转化
     *
     * @param ctx  上下文
     * @param cls  类
     * @param name 属性名
     * @param pojo 传入的Pojo
     *
     * @return 存入数据库对象
     */
    @Override
    public Object toDb(ExecuteContext ctx, Class cls, String name, Object pojo) {
        Object value = BeanKit.getBeanProperty(pojo, name);
        if (ObjectUtil.isNull(value)) {
            return new BigDecimal(0);
        }
        return ((Money) value).getAmount();
    }

    /**
     * 从数据库取值后的转化
     *
     * @param ctx   上下文
     * @param cls   类
     * @param name  属性名
     * @param rs    结果集
     * @param index 下标
     *
     * @return 转换后的对象
     *
     * @throws SQLException
     * @
     */
    @Override
    public Object toAttr(ExecuteContext ctx, Class cls, String name, ResultSet rs, int index) throws SQLException {
        BigDecimal money = rs.getBigDecimal(index);
        return new Money(money);
    }
}